/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.operativa.service;

import java.util.Date;
import java.util.List;

import co.gov.medellin.sdep.sisdep.common.dto.GenericComponentVO;
import co.gov.medellin.sdep.sisdep.common.message.MessageDescriptorConstant;
import co.gov.medellin.sdep.sisdep.common.service.BaseService;
import co.gov.medellin.sdep.sisdep.model.Operativo;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IOperativoDAOT;
import co.gov.medellin.sdep.sisdep.operativa.exception.OperativoException;
import co.gov.medellin.sdep.sisdep.operativa.exception.OperativoRuntimeException;
import co.gov.medellin.sdep.sisdep.operativa.exception.descriptor.OperativoMessageDescriptor;

/**
 * <p>
 * Implementacion de todos los servicios servicios necesarios para la gestion de los Operativos ejecutados en ESPUB.
 * </p>
 * <p>
 * Copyright (c) 2012<BR>
 * Consult-Soft S.A.<BR>
 * Created on: Jul 03, 2012<BR>
 * 
 * @author atabares
 * </p>
 */
public class OperativoServiceImpl extends BaseService implements IOperativoService {

	/** Default serial version */
	private static final long serialVersionUID = -130107991452555782L;
	
	/** Interface de acceso a los DAOs de Operativo. */
	private IOperativoDAOT operativoDAO;

	/** Constructor por defecto. */
	public OperativoServiceImpl() {
	}

	/**
	* Obtiene el parametro operativoDAO.
	* @see OperativoServiceImpl#operativoDAO
	*
	* @return El parametro operativoDAO.
	*/
	public IOperativoDAOT getOperativoDAO() {
		return operativoDAO;
	}

	/**
	* Asigna el parametro operativoDAO.
	* @see OperativoServiceImpl#operativoDAO
	*
	* @param operativoDAO valor a asignar al parametro operativoDAO.
	*/
	public void setOperativoDAO(IOperativoDAOT operativoDAO) {
		this.operativoDAO = operativoDAO;
	}

	
	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.operativa.service.IOperativoService#insert(co.gov.medellin.sdep.sisdep.model.Operativo)
	 */
	public void insert(Operativo operativo) throws OperativoException {
		try{
			operativo.setUsuarioCrea(getPrincipalUser());
			operativo.setFechaCrea(new Date());
			getOperativoDAO().insert(operativo);
		}catch (Exception e) {
			Object [] infoError = {
			};
			if(e.getCause().toString().indexOf("UNIQUE KEY") >= 0){
				throw new OperativoException(new OperativoMessageDescriptor(MessageDescriptorConstant.UK_VIOLATION), infoError, e);
			}else{
				throw new OperativoException(new OperativoMessageDescriptor(MessageDescriptorConstant.SAVE), infoError, e);
			}
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.operativa.service.IOperativoService#update(co.gov.medellin.sdep.sisdep.model.Operativo)
	 */
	public final void update(Operativo operativo) throws OperativoException {
		try{
			operativo.setUsuarioModifica(getPrincipalUser());
			operativo.setFechaModifica(new Date());
			getOperativoDAO().update(operativo);
		}catch (Exception e) {
			Object [] infoError = {
			};
			if(e.getCause().toString().indexOf("UNIQUE KEY") >= 0){
				throw new OperativoRuntimeException(new OperativoMessageDescriptor(MessageDescriptorConstant.UK_VIOLATION), infoError, e);
			}else{
				throw new OperativoRuntimeException(new OperativoMessageDescriptor(MessageDescriptorConstant.UPDATE), infoError, e);
			}
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.operativa.service.IOperativoService#delete(co.gov.medellin.sdep.sisdep.model.Operativo)
	 */
	public final void delete(Operativo operativo) throws OperativoException {
		try {
			operativo.setUsuarioModifica(getPrincipalUser());
			operativo.setFechaModifica(new Date());
			getOperativoDAO().delete(operativo);
		}catch (Exception e) {
			Object [] infoError = {
			};
			throw new OperativoRuntimeException(new OperativoMessageDescriptor(MessageDescriptorConstant.DELETE), infoError, e);
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.operativa.service.IOperativoService#load(int, int, co.gov.medellin.sdep.sisdep.model.Operativo)
	 */
	public final List load(int start,int max, Operativo operativo) throws OperativoException {
		try{
			//return getOperativoDAO().getAllOperativoPaginated(start, max, criteria);
			return getOperativoDAO().load();
		}catch (Exception e) {
			Object [] infoError = null;
			throw new OperativoRuntimeException(new OperativoMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.operativa.service.IOperativoService#get(long)
	 */
	public final Operativo get(long id) throws OperativoException {
		try{
			return getOperativoDAO().findByPrimaryKey(id);
		}catch (Exception e) {
			Object [] infoError = {new Long(id)};
			throw new OperativoRuntimeException(new OperativoMessageDescriptor(MessageDescriptorConstant.GET), infoError, e);
		}
	}
	
	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.operativa.service.IOperativoService#getOperativoListByCriteria(co.gov.medellin.sdep.sisdep.model.Operativo)
	 */
	public List getOperativoListByCriteria(Operativo operativoSearch) {
		try{
			return getOperativoDAO().getOperativoListByCriteria(operativoSearch);
		} catch (Exception e) {
			Object [] infoError = null;
			
			throw new OperativoRuntimeException(new OperativoMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.operativa.service.IOperativoService#getRecursoHumanoList()
	 */
	public GenericComponentVO getRecursoHumanoList() {
		try{
			return getOperativoDAO().getRecursoHumanoList();
		} catch (Exception e) {
			Object [] infoError = null;
			
			throw new OperativoRuntimeException(new OperativoMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

}
